Distribution of software features (such as new software products) is a time consuming activity, particularly in a system including a great number of target computers to which the software products must be distributed. For example, this is a commonplace activity in large organizations embracing thousands of workstations, where software products are periodically upgraded in order to be abreast of the information technology development or to comply with organizational changes.
Software distribution applications have been proposed in the last years to assist a system administrator in efficiently managing deployment of software products from a central site of the system. A software distribution application controls building of packages including instructions specifying the actions to be carried out on the target computers for installing or removing selected software products; each package further embeds a copy of the software products to be installed on the target computers. The package is transmitted to each target computer, and the corresponding instructions are interpreted so as to enforce the desired software products.
In order to increase flexibility of the software distribution application, the instructions are typically conditioned to a configuration of the target computer (for example, defined by a series of hardware parameters). The package is then made generic for target computers having different hardware configurations so as to require less maintenance on the part of the system administrator.
The software distribution applications known in that art are based on an enforcement model, wherein all the operations are managed from the central site of the system; no kind of cooperation between the central site and the target computers is supported. This lack of cooperation brings about inconsistencies in several scenarios.
Particularly, hardware upgrades of the target computer may change the result of the evaluation of the conditions defined in the package; in other words, conditions that were true at the distribution time may become false, and vice-versa. As a consequence, the software products installed on the target computer are not consistent with its hardware configuration any longer. At best, the hardware resources of the target computer are under-exploited. However, these inconsistencies may cause run-time errors (for example, due to missing memory allocation); at worst, they may impair operation of the whole target computer (for example, when the version of the software products installed on the target computer is incompatible with its hardware).
These drawbacks are particularly acute in high dynamic environments, wherein the hardware configuration of the target computers changes frequently.